package com.jia.leetCode;

import java.util.*;

/**
 *
 2342. 数位和相等数对的最大和

 给你一个下标从 0 开始的数组 nums ，数组中的元素都是 正 整数。请你选出两个下标 i 和 j（i != j），且 nums[i] 的数位和 与  nums[j] 的数位和相等。

 请你找出所有满足条件的下标 i 和 j ，找出并返回 nums[i] + nums[j] 可以得到的 最大值 。



 示例 1：

 输入：nums = [18,43,36,13,7]
 输出：54
 解释：满足条件的数对 (i, j) 为：
 - (0, 2) ，两个数字的数位和都是 9 ，相加得到 18 + 36 = 54 。
 - (1, 4) ，两个数字的数位和都是 7 ，相加得到 43 + 7 = 50 。
 所以可以获得的最大和是 54 。
 示例 2：

 输入：nums = [10,12,19,14]
 输出：-1
 解释：不存在满足条件的数对，返回 -1 。


 提示：

 1 <= nums.length <= 105
 1 <= nums[i] <= 109
 */
public class Pro2342 {
    /*
     * 使用HashMap来存储digitsSum作为key， value为digitsSum遍历的nums[i]最大值
     */
    public int maximumSum(int[] nums) {
        //key 数位和  value为nums[i]值
        Map<Integer, Integer> map = new HashMap<>();
        int res =  -1;
        for(int num : nums){
            int digitsSum = 0, tmp = num;
            while(tmp > 0){
                digitsSum += tmp % 10;
                tmp /= 10;
            }
            if(map.containsKey(digitsSum)) {
                res = Math.max(res, map.get(digitsSum) + num);
                map.put(digitsSum, Math.max(map.get(digitsSum), num));//把最大的nums[i]放入map中
            }else{
                map.put(digitsSum, num);
            }
        }
        return res;
    }
    /**
     * 排序
     * @param nums
     * @return
     */
    public int maximumSum2(int[] nums) {
        List<int[]> list = new ArrayList<>();
        for(int i = 0; i < nums.length; i ++){
            int digitsSum = 0, tmp = nums[i];
            while(tmp > 0) {
                digitsSum += tmp % 10;
                tmp /= 10;
            }
            int[] a = new int[]{digitsSum, nums[i]};
            list.add(a);
        }
        Collections.sort(list, (a1, a2)->{
            return a1[0] == a2[0]? a1[1] - a2[1]: a1[0] - a2[0];
        });
        int res = -1;
        for(int i = 1; i < list.size(); i++){
            if(list.get(i)[0] == list.get(i-1)[0]) {
                res = Math.max(res, list.get(i)[1] + list.get(i-1)[1]);
            }
        }

        return res;
    }


}
